package com.cheng.example.java.version.java8.chap09_base64;


import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.nio.charset.StandardCharsets;
import java.util.Base64;

/**
 * Base64是一种字符串编码格式，采用了A-Z，a-z，0-9，“+”和“/”这64个字符来编码原始字符（还有垫字符“=”）。
 * 一个字符本身是一个字节，也就是8位，而base64编码后的一个字符只能表示6位的信息。
 * 也就是原始字符串中的3字节的信息编码会变成4字节的信息。Base64的主要作用是满足MIME的传输需求。
 * 在Java8中Base64编码已经成为Java类库的标准，且内置了Base64编码的编码器和解码器。
 * 原文链接：https://blog.csdn.net/f641385712/article/details/81289401
 */
public class Demo {

    public static void main(String[] args) {
        String orig = "h";
        //编码加密
        String desc = Base64.getEncoder().encodeToString(orig.getBytes(StandardCharsets.UTF_8));
        System.out.println("加密后的字符串为:" + desc);
        //解码解密
        String unDecodeStr = new String(Base64.getDecoder().decode(desc), StandardCharsets.UTF_8);
        System.out.println("解密后的字符串为" + unDecodeStr);
    }


    /**
     * 将文件File转换为Base64
     * @param path
     * @return
     */
    public static String fileToBase64(String path) {
        File file = new File(path);
        FileInputStream inputFile;
        try {
            inputFile = new FileInputStream(file);
            byte[] buffer = new byte[(int) file.length()];
            inputFile.read(buffer);
            inputFile.close();
            return Base64.getEncoder().encodeToString(buffer);
        } catch (Exception e) {
            throw new RuntimeException("文件路径无效\n" + e.getMessage());
        }
    }

    public static boolean base64ToFile(String base64, String path) {
        byte[] buffer;
        try {
            buffer = Base64.getDecoder().decode(base64);
            FileOutputStream out = new FileOutputStream(path);
            out.write(buffer);
            out.close();
            return true;
        } catch (Exception e) {
            throw new RuntimeException("base64字符串异常或地址异常\n" + e.getMessage());
        }
    }
}
